"""
列表框例子的UI层。
"""
import typing

from elio import core


class ListBoxLayer(core.AutoRecycleLayer[core.Activity]):
    layout: core.ListLayout

    async def on_create(self, *args: typing.Any, **kwargs: typing.Dict):
        await super().on_create(*args, *kwargs)

    async def on_hide(self):
        await super().on_hide()
        # 销毁列表布局管理器（其中的所有小部件也一并销毁）
        await self.layout.destroy()

    async def on_show(self):
        await super().on_show()
        activity = self.parent
        # 列表框效果可以使用ListLayout来实现
        self.layout = await core.ListLayout.create(activity)
        # 循环添加数据
        for i in range(100):
            # 往布局管理器中增加小部件，0.05表示占用布局管理器高度的百分之5，因为布局管理器和activity一样高，所以就是屏幕高度的百分之5
            w = await self.layout.add(core.WidgetText, 0.05, widget_args=(f'测试{i}',))
            # add函数会返回小部件的实例，我们可以往实例上绑定一些数据
            w.data = f'这是小部件附加的数据{i}'

        async def cb(widget: core.WidgetText):
            """
            列表项目点击事件。

            :param widget:
            """
            print('被点击', await widget.get_text(), widget.data)

        await self.layout.set_on_click_listener(cb)

    async def on_pause(self):
        await super().on_pause()

    async def on_resume(self):
        await super().on_resume()

    async def on_destroy(self, *args: typing.Any, **kwargs: typing.Dict):
        await super().on_destroy(*args, **kwargs)
